#include <stdio.h>

int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  struct List {
    int num;
    struct List *next;
  };
  List *head = new List; // 虚拟头结点
  List *p = new List;    // 链表结点
  p = head;              // 初始结点在虚拟头结点位置
  // 创建链表
  for (int i = 1; i <= n; i++) {
    List *node = new List; // 新建结点
    node->num = i;         // 赋初值
    node->next = NULL;     // 新结点的后结点初始化为空
    // p随node移动形成链式结构
    p->next = node;
    p = p->next;
  }
  p->next = head->next; // 尾结点指向头结点形成循环链表
  // 遇到m-1 指针跳两个 指向自己时停
  p = head->next;                // p从第一个结点开始
  int i = 1;                     // 报数的值
  while (p->next->num != p->num) // 只剩一个结点（指针指向自己）时结束
  {
    if (i == m - 1) // 出局结点的前一个结点
    {
      printf("%d ", p->next->num); // 输出出局者编号
      List *temp = p->next;        // 临时变量存出局者结点
      p->next = p->next->next;     // 淘汰出局者
      i = 0;                       // 报数归零
      delete temp;                 // 释放出局者空间
    }
    i++;         // 从一报数
    p = p->next; // 移动链表
  }
  printf("%d", p->num); // 输出幸存者编号
  return 0;
}